草庐IT

c++ - decltype 的行为

全部标签

c - 在不使用其他功能的情况下释放 C 扩展中的全局 VM 锁

我不明白为什么在发布或获取RubyCAPI中的GVL时需要另一个间接级别。rb_thread_call_without_gvl()和rb_thread_call_with_gvl()都需要一个只接受一个参数的函数,但情况并非总是如此。我不想仅仅为了发布GVL而将我的参数包装在一个结构中。它使代码的可读性变得复杂,并且需要从void指针转换到void指针。在查看Ruby的线程代码后,我找到了GVL_UNLOCK_BEGIN。/GVL_UNLOCK_END与Python的Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS匹配的宏但我找不到关于它们以及何时

c - Ruby 解释器的嵌入 API 的文档在哪里?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion我正在寻找有关将Ruby解释器嵌入到C或C++程序以及用于该目的的API的全面的在线文档资源。Pickaxe书中关于此的部分非常好,但我的版本指的是Ruby1.8,我对当前的ruby​​版本范围很感兴趣,即1.8.x、1.9.x和2.0,并且有很多跨该版本范围的嵌入处理之间的差异。作为引用,有问题的Ruby解释器是来自http://www.ruby-lang.org/

Ruby 1.9.3 Dir.glob 奇怪的递归匹配行为

假设目录结构为:a/b/c/d/e/f/g/h我试图通过以下方式找到“h”:Dir.glob('a/**/f/g/h')但是这不起作用。有什么想法吗?您可以尝试下面的测试用例:$/usr/bin/ruby-vruby1.9.3p194(2012-04-20revision35410)[x86_64-linux]$mkdir-pa/b/c/d/e/f/g/h$ruby-e"putsDir.glob('a/**/*')"a/ba/b/ca/b/c/da/b/c/d/ea/b/c/d/e/fa/b/c/d/e/f/ga/b/c/d/e/f/g/h$ruby-e"putsDir.glob('a

ruby - defined?(super) 检查的奇怪行为

最近我发现defined?运算符有一些奇怪的行为,用于检查super关键字是否可以在当前上下文中使用。通常它工作正常,但是当我尝试组合定义的时?super用一点元编程检查,它给了我意想不到的结果。显示比描述更容易,所以这里是一个提炼的例子来说明问题:classA;defself.def_f!;singleton_class.send(:define_method,:f){defined?super}endendclassAA(A和AA类都有.def_f!类方法)A.def_f!A.f#=>nilAA.f#=>nil(A.f没有super和AA.f调度到A.f,所以到目前为止一切正常,但

ruby-on-rails - 覆盖 Rails ActiveRecord 销毁行为的最佳方法是什么?

我有一个应用程序,我想在其中覆盖我的许多模型的销毁行为。用例是用户可能有删除特定记录的合法需求,但实际上从数据库中删除该行会破坏影响其他相关模型的参照完整性。例如,系统的用户可能想要删除不再与之有业务往来的客户,但需要维护与该客户的交易。看来我至少有两个选择:将数据复制到必要的模型中,有效地对我的数据模型进行非规范化,这样删除的记录就不会影响相关数据。覆盖ActiveRecord的“销毁”行为以执行某些操作,例如设置一个标志指示用户“删除”了记录并使用此标志隐藏记录。我是否缺少更好的方法?选项1对我来说似乎是一个可怕的想法,但我很想听到相反的论据。选项2似乎有点像Rails,但我想知道

ruby - 运行脚本与 IRB 控制台时的不同行为?

我有一个简单的代码片段,它定义了一个方法(在Ruby的主对象上),然后检查它是否已定义。puts"#{self}#{self.class}"deffoo;endputsself.methods.include?(:foo)当我在Ruby控制台中运行它时。我得到:mainObjecttrue如果我将此代码粘贴到.rb文件中并像这样运行该文件rubytest_script.rb,我会得到以下输出mainObjectfalse我不明白为什么我会看到这种行为。方法正在在脚本中定义,因为我可以调用该方法。我都在Ruby2.3.4上运行 最佳答案

c - Ruby C 扩展开发人员的命名约定

在用C为ruby​​编写扩展时,我对遵循正确的命名约定很感兴趣。具体来说,我指的是将_p添加到谓词的函数名称以及为变量添加前缀m代表模块,c代表类等等。例如,如果我们想在C语言中定义一个像下面这样的谓词方法,我们应该在定义该方法的函数中使用_p作为后缀。classMyClassdefawesome?trueendend在C中:staticVALUEmy_extension_my_class_awesome_p(VALUEself){returnQtrue;}voidInit_my_extension(void){VALUEcMyClass=rb_define_class("MyClas

ruby - ruby 模块 self.included 和 self.extended 行为记录在哪里?

我正在查看rubymixin博客文章,它说当一个模块包含在一个类中时,它的self.included()方法被调用。我的问题是,这种行为的正式记录在哪里?我似乎无法在ruby​​-docs.org网站或镐上找到它。 最佳答案 虽然它不在RubyDoc上出于某种原因,included实际上已被记录。在终端中运行riModule.included提供以下内容:included(othermod)Callbackinvokedwheneverthereceiverisincludedinanothermoduleorclass.Thiss

ruby - 在 RSpec 测试中模拟 ActiveRecord 关系行为

我在测试时遇到过这个问题。假设我有两个模型,User和Post,其中userhas_many:posts。我正在尝试指定包含如下内容的代码块:user=User.find(123)post=user.posts.find(456)我知道如何模拟User.find和user.posts部分。user.posts模拟返回一个Post对象数组。当它到达.find(456)部分时,一切都崩溃了,并出现noblockgiven异常。所以我的问题是:作为user.postsmock的结果我要返回什么,以便.find(456)方法对其起作用?User.first.posts.class说它是Arra

c - 奇怪的 "half to even"不同语言的舍入

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。GNUbash,版本4.2.24:$>printf"%.0f,%.0f\n"48.549.548,50ruby1.8.7>printf("%.0f,%.0f\n",48.5,49.5)48,50Perl5.12.4$>perl-e'printf("%.0f,%.0f\n",48.5,49.5)'48,50海湾合作委员会4.5.3:>printf("%.0